From 2d97f52713c3850bd3d6d865697a7738a98540aa Mon Sep 17 00:00:00 2001 From: Matthew Daley Date: Sat, 14 Dec 2013 14:04:47 +1300 Subject: [PATCH] xenconsole: adjust pty opening error checking and handling Currently we check the pty path received from xenstore with access(); if it indicates that the pty is not accessible, we loop around and wait for a new path to appear in xenstore. This has several issues: * If a path has been written to xenstore, it can be assumed that that pty should already be accessible to xenconsole, and hence any error that occurs while trying to open it should be fatal and not ignored * If access() indicates no access to the pty, the memory allocated for the path is leaked when going around the loop again * The accessibility of the pty could change between the access() and open() calls, leading to a TOCTOU race (this is what Coverity is complaining about). By removing the explicit access() check and just erroring out whenever open() fails, we fix all these issues. Coverity-ID: 1056047 Signed-off-by: Matthew Daley Reviewed-by: Andrew Cooper Acked-by: Ian Jackson --- tools/console/client/main.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/tools/console/client/main.c b/tools/console/client/main.c index 38c856a112..324200890d 100644 --- a/tools/console/client/main.c +++ b/tools/console/client/main.c @@ -116,12 +116,9 @@ static int get_pty_fd(struct xs_handle *xs, char *path, int seconds) * disambiguate: just read the pty path */ pty_path = xs_read(xs, XBT_NULL, path, &len); if (pty_path != NULL) { - if (access(pty_path, R_OK|W_OK) != 0) - continue; pty_fd = open(pty_path, O_RDWR | O_NOCTTY); - if (pty_fd == -1) - err(errno, "Could not open tty `%s'", - pty_path); + if (pty_fd == -1) + err(errno, "Could not open tty `%s'", pty_path); free(pty_path); } } -- 2.30.2